/* 思路：
先比较实例对象的原型等不等于构造函数的prototype，
如果等于，则返回true
如果不等于，则找实例对象原型的原型，比较它等不等于构造函数的prototype，
如果等于，则返回true
如果不等于，则继续在原型链往上找，直到找到原型链的最顶层，即null，则为false
*/

// function myInstanceof(obj, fn) {
//   // 构造函数的原型对象
//   let prototype = fn.prototype;
//   // 实例对象的原型对象
//   let proto = Object.getPrototypeOf(obj);
//   while (true) {
//     // 没找到返回false
//     if (proto === null) {
//       return false;
//       // 找到返回true
//     } else if (proto === prototype) {
//       return true;
//     }
//     // 再往原型的原型上面找
//     proto = Object.getPrototypeOf(proto);
//   }
// }

function myInstanceof(obj, fn) {
  // 构造函数的原型对象
  let prototype = fn.prototype;
  // 实例对象的原型对象
  let proto = Object.getPrototypeOf(obj);
  while (proto) {
     if (proto === prototype) {
      return true;
    }
    // 再往原型的原型上面找
    proto = Object.getPrototypeOf(proto);
  }
  return false;
}